package com.xj.algorithm.leetcode;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

/**
 * 相对名次
 */
public class L506_相对名次 {

    /**
     * 给出 N 名运动员的成绩，找出他们的相对名次并授予前三名对应的奖牌。前三名运动员将会被分别授予 “金牌”，“银牌” 和“ 铜牌”（"Gold Medal", "Silver Medal", "Bronze Medal"）。
     * <p>
     * (注：分数越高的选手，排名越靠前。)
     * <p>
     * 示例 1:
     * <p>
     * 输入: [5, 4, 3, 2, 1]
     * 输出: ["Gold Medal", "Silver Medal", "Bronze Medal", "4", "5"]
     * 解释: 前三名运动员的成绩为前三高的，因此将会分别被授予 “金牌”，“银牌”和“铜牌” ("Gold Medal", "Silver Medal" and "Bronze Medal").
     * 余下的两名运动员，我们只需要通过他们的成绩计算将其相对名次即可。
     * 提示:
     * <p>
     * N 是一个正整数并且不会超过 10000。
     * 所有运动员的成绩都不相同。
     */
    public static void main(String[] args) {
        String[] res = findRelativeRanks(new int[]{5, 4, 3, 2, 1});
        for (String v : res) {
            System.out.println(v);
        }

        String[] res2 = findRelativeRanks(new int[]{10, 3, 8, 9, 4});
        for (String v : res2) {
            System.out.println(v);
        }
    }

    //自己的解法：排序后,创建对应关系即可
    public static String[] findRelativeRanks(int[] nums) {
        int length = nums.length;
        int[] arr = Arrays.copyOf(nums, length);
        Arrays.sort(arr);

        Map<Integer,String> map=new HashMap<>();
        for (int i = 0; i < length; i++) {
            if (i == length-1) map.put(arr[i],"Gold Medal");
            if (i == length-2) map.put(arr[i],"Silver Medal");
            if (i == length-3) map.put(arr[i],"Bronze Medal");
            if (i <= length-4) map.put(arr[i],String.valueOf(length-i));
        }

        String[] res=new String[length];
        for (int i=0;i<length;i++){
            res[i]=map.get(nums[i]);
        }

        return res;
    }

}
